<?php

require_once(BaseConfig::LoadClass('objeto_base.class.php'     ));
require_once(BaseConfig::LoadClass('filtro.class.php'          ));
require_once(BaseConfig::LoadClass('abc.class.php'             ));
require_once(BaseConfig::LoadClass('clientes.class.php'        ));
require_once(BaseConfig::LoadClass('inventario.class.php'      ));
require_once(BaseConfig::LoadClass('productos.class.php'       ));
require_once(BaseConfig::LoadClass('trabajadores.class.php'    ));
require_once(BaseConfig::LoadClass('cotizacion_linea.class.php'));
require_once(BaseConfig::LoadClass('doc_pdf.class.php'         ));
require_once(BaseConfig::LoadClass('orden_trabajo.class.php'   ));

$strGTotalLineasCot = 11;

class PDF_Cotizacion extends PDFDoc {
  /**
   * Objeto con la orden de trabajo a imprimir
   * 
   * @var Cotizacion
   */
  var $__oCotizacion;
  var $__oOrdenTrabajo;
  
  /**
   * Color de los bordes
   * @var int
   */
  var $__intColorBordes;
  
  /**
   * Color de los textos estaticos de la cabecera
   * @var int
   */
  var $__intColorTextosEsta;
  
  /**
   * Color de los textos dinamicos (Los que vienen de la orden de trabajo)
   * @var int
   */
  var $__intColorTextosDin;
  
  function PDF_Cotizacion($oCotizacion) {
    parent::PDFDoc();
    
    $this->oTCPDF->SetAuthor('NICRA');
    $this->__intBordesPrueba = 0;
    $this->__oCotizacion     = $oCotizacion;
    
    $this->__intColorTextosEsta =   0;
    $this->__intColorTextosDin  = 127;
    
    // X = 10, Y = 8.5, W = 190 (+X = 200)
  }
  
  function CrearInteriorPagina() {
    global $strGTotalLineasCot;
    
    // Bordes redondos que contienen toda la info
    $this->oTCPDF->RoundedRect(10, 50, 190, 100 + (($strGTotalLineasCot + 7) * 4), 2);
    
    // Info del cliente
    $this->oTCPDF->Rect( 12,  52, 140, 4); // Cliente
    $this->oTCPDF->Rect( 12,  56, 140, 4); // Direccion
    $this->oTCPDF->Rect( 12,  60, 140, 4); // Atencion A
    $this->oTCPDF->Rect( 12,  64, 140, 4); // Correo Electronico
    $this->oTCPDF->Rect( 12,  68, 140, 4); // Tel - Fax
    
    $this->oTCPDF->Rect( 12,  74, 110, 4); // Fecha
    $this->oTCPDF->Rect( 12,  78, 110, 4); // Contacto
    $this->oTCPDF->Rect( 12,  82, 110, 4); // Correo Electronico
    $this->oTCPDF->Rect( 12,  86, 110, 4); // Telefono
    $this->oTCPDF->Rect( 12,  90, 110, 4); // Vigencia
    
    $this->oTCPDF->Rect(124,  74,  74, 4); // Datos del Equipo
    $this->oTCPDF->Rect(124,  78,  74, 4); // Marca
    $this->oTCPDF->Rect(124,  82,  74, 4); // Modelo
    $this->oTCPDF->Rect(124,  86,  74, 4); // Serie
    
    $this->oTCPDF->Rect( 12,  96, 185, 4); // Presupuesto de servicio
    $this->oTCPDF->Rect( 12, 100,  10, 4); // Titulos (Cant)
    $this->oTCPDF->Rect( 22, 100, 115, 4); // Titulos (Descripcion)
    $this->oTCPDF->Rect(137, 100,  20, 4); // Titulos (Unidad)
    $this->oTCPDF->Rect(157, 100,  20, 4); // Titulos (Precio)
    $this->oTCPDF->Rect(177, 100,  20, 4); // Titulos (Total)
    for($i = 0; $i < $strGTotalLineasCot; $i++) {
      $this->oTCPDF->Rect( 12, 104 + ($i * 4),  10, 4); // Productos (Cant)
      $this->oTCPDF->Rect( 22, 104 + ($i * 4), 115, 4); // Productos (Descripcion)
      $this->oTCPDF->Rect(137, 104 + ($i * 4),  20, 4); // Productos (Unidad)
      $this->oTCPDF->Rect(157, 104 + ($i * 4),  20, 4); // Productos (Precio)
      $this->oTCPDF->Rect(177, 104 + ($i * 4),  20, 4); // Productos (Total)
    }
    
    
    
    $this->oTCPDF->Rect(157, 100 + (($strGTotalLineasCot +  2) * 4),  20, 4); // Subtotal (Label)
    $this->oTCPDF->Rect(177, 100 + (($strGTotalLineasCot +  2) * 4),  20, 4); // Subtotal (Cant )
    $this->oTCPDF->Rect(157, 100 + (($strGTotalLineasCot +  3) * 4),  20, 4); // IVA      (Label)
    $this->oTCPDF->Rect(177, 100 + (($strGTotalLineasCot +  3) * 4),  20, 4); // IVA      (Cant )
    $this->oTCPDF->Rect(157, 100 + (($strGTotalLineasCot +  4) * 4),  20, 4); // Total    (Label)
    $this->oTCPDF->Rect(177, 100 + (($strGTotalLineasCot +  4) * 4),  20, 4); // Total    (Cant )
    
    $this->oTCPDF->Rect( 12, 100 + (($strGTotalLineasCot +  6) * 4),  40, 4); // Garantia    (Label)
    $this->oTCPDF->Rect( 52, 100 + (($strGTotalLineasCot +  6) * 4), 145, 4); // Garantia    (Desc )
    $this->oTCPDF->Rect( 12, 100 + (($strGTotalLineasCot +  7) * 4),  40, 4); // Tiempo Ent  (Label)
    $this->oTCPDF->Rect( 52, 100 + (($strGTotalLineasCot +  7) * 4), 145, 4); // Tiempo Ent  (Desc )
    $this->oTCPDF->Rect( 12, 100 + (($strGTotalLineasCot +  8) * 4),  40, 4); // Condiciones (Label)
    $this->oTCPDF->Rect( 52, 100 + (($strGTotalLineasCot +  8) * 4), 145, 4); // Condiciones (Desc )
    
    $this->oTCPDF->Rect( 12, 100 + (($strGTotalLineasCot + 10) * 4), 185, 8); // Leyenda al final
    
    $this->oTCPDF->Rect( 12, 100 + (($strGTotalLineasCot + 13) * 4), 185, 20); // Atentamente
    $this->oTCPDF->Rect( 82, 100 + (($strGTotalLineasCot + 17) * 4),  45, 0); // Linea de firma
  }
  
  function CrearLabelsInterior() {
    global $strGTotalLineasCot;
    
    // Info del cliente
    $this->PonerTexto(154,  52,  44, 6, 'COTIZACION'                          , "L", 11, "B" );
    $this->PonerTexto(154,  58,  44, 6, 'No.'                                 , "L", 11, "B" );
    
    $this->PonerTexto( 12,  52, 140, 4, 'Cliente'                             , "" ,  7, "" );
    $this->PonerTexto( 12,  56, 140, 4, 'Direccion'                           , "" ,  7, "" );
    $this->PonerTexto( 12,  60, 140, 4, 'Atencion A'                          , "" ,  7, "" );
    $this->PonerTexto( 12,  64, 140, 4, 'Correo Electronico'                  , "" ,  7, "" );
    $this->PonerTexto( 12,  68, 140, 4, 'Tel - Fax'                           , "" ,  7, "" );
    
    $this->PonerTexto( 12,  74, 120, 4, 'Fecha'                               , "" ,  7, "" );
    $this->PonerTexto( 12,  78, 120, 4, 'Contacto'                            , "" ,  7, "" );
    $this->PonerTexto( 12,  82, 120, 4, 'Correo Electonico'                   , "" ,  7, "" );
    $this->PonerTexto( 12,  86, 120, 4, 'Telefono'                            , "" ,  7, "" );
    $this->PonerTexto( 12,  90, 120, 4, 'Vigencia'                            , "" ,  7, "" );
    
    $this->PonerTexto(124,  74,  74, 4, 'Datos del Equipo'                    , "" ,  7, "" );
    $this->PonerTexto(124,  78,  74, 4, 'Marca'                               , "" ,  7, "" );
    $this->PonerTexto(124,  82,  74, 4, 'Modelo'                              , "" ,  7, "" );
    $this->PonerTexto(124,  86,  74, 4, 'Serie'                               , "" ,  7, "" );
    
    $this->PonerTexto( 12,  96, 185, 4, 'PRESUPUESTO DE SERVICIO'             , "C",  8, "B");
    $this->PonerTexto( 12, 100,  10, 4, 'Cant'                                , "C",  7, "" );
    $this->PonerTexto( 22, 100, 115, 4, 'Descripción'                         , "C",  7, "" );
    $this->PonerTexto(137, 100,  20, 4, 'Unidad'                              , "C",  7, "" );
    $this->PonerTexto(157, 100,  20, 4, 'Precio'                              , "C",  7, "" );
    $this->PonerTexto(177, 100,  20, 4, 'Total'                               , "C",  7, "" );
    
    $this->PonerTexto(157, 100 + (($strGTotalLineasCot +  2) * 4),  20, 4, 'Sub-Total'   , "R",  8, "B");
    $this->PonerTexto(157, 100 + (($strGTotalLineasCot +  3) * 4),  20, 4, 'I. V. A. 16%', "R",  8, "B");
    $this->PonerTexto(157, 100 + (($strGTotalLineasCot +  4) * 4),  20, 4, 'TOTAL'       , "R",  8, "B");
    
    $this->PonerTexto( 12, 100 + (($strGTotalLineasCot +  6) * 4),  40, 4, 'Garantia:'           , "R",  6, "B");
    $this->PonerTexto( 12, 100 + (($strGTotalLineasCot +  7) * 4),  40, 4, 'Tienpo de Entrega:'  , "R",  6, "B");
    $this->PonerTexto( 12, 100 + (($strGTotalLineasCot +  8) * 4),  40, 4, 'Condiciones de Pago:', "R",  6, "B");
    
    $this->PonerTexto( 12, 100 + (($strGTotalLineasCot + 10) * 4), 185, 4, 'Esta cotización solo incluye el catalogo de conceptos antes descritos; en caso de que se requiera de refacciones o', "C",  6, "");
    $this->PonerTexto( 12, 100 + (($strGTotalLineasCot + 11) * 4), 185, 4, 'reparaciones adicionales (Mantenimiento Correctivo.) se les avisara de inmediato para su autorizacion.'            , "C",  6, "");
    
    $this->PonerTexto( 12, 100 + (($strGTotalLineasCot + 14) * 4), 185, 4, 'Atentamente', "C",  6, "");
    $this->PonerTexto( 12, 100 + (($strGTotalLineasCot + 17) * 4), 185, 4, 'Dilian Hernandez Alvarez', "C",  6, "");
  }
  
  function ColocarInfoOrdenTrabajo() {
    global $strGTotalLineasCot;
    
    $this->__oCotizacion->ObtenerObjetos();
    
    $this->oTCPDF->SetTextColor(250, 0, 0);
    $this->PonerTexto(154,  58,  44, 6, sprintf("%08d", $this->__oCotizacion->intIdCotizacion), "R", 11, "B" );
    $this->oTCPDF->SetTextColor($this->__intColorTextosDin);
    
    $this->PonerTexto( 32,  52, 120, 4, $this->__oCotizacion->__oCliente->strRFC      . " - " . $this->__oCotizacion->__oCliente->strRazonSocial, "", 7, "");
    $this->PonerTexto( 32,  56, 120, 4, $this->__oCotizacion->__oCliente->strDireccion);
    $this->PonerTexto( 32,  60, 120, 4, $this->__oCotizacion->__oCliente->strAtencionA);
    $this->PonerTexto( 32,  64, 120, 4, $this->__oCotizacion->__oCliente->strCorreo);
    $this->PonerTexto( 32,  68, 120, 4, $this->__oCotizacion->__oCliente->strTelefono . " - " . $this->__oCotizacion->__oCliente->strFax        );
    
    $this->PonerTexto( 32,  74, 165, 4, $this->__oCotizacion->dteFecha   );
    $this->PonerTexto( 32,  78, 165, 4, $this->__oCotizacion->strContacto);
    $this->PonerTexto( 32,  82, 165, 4, $this->__oCotizacion->strCorreo  );
    $this->PonerTexto( 32,  86, 165, 4, $this->__oCotizacion->strTelefono);
    $this->PonerTexto( 32,  90, 165, 4, $this->__oCotizacion->strVigencia);
    
    $this->PonerTexto(144,  74,  54, 4, $this->__oCotizacion->__oInventario->strNoEco );
    $this->PonerTexto(144,  78,  54, 4, $this->__oCotizacion->__oInventario->strMarca );
    $this->PonerTexto(144,  82,  54, 4, $this->__oCotizacion->__oInventario->strModelo);
    $this->PonerTexto(144,  86,  54, 4, $this->__oCotizacion->__oInventario->strSerie );
    
    $fltTotalRef = 0;
    for($i = 0; $i < $strGTotalLineasCot; $i++) {
      if($this->__oCotizacion->__arrCotizacionLinea[$i]->intIdProducto) {
        $intCantidad  = $this->__oCotizacion->__arrCotizacionLinea[$i]->fltCantidad - 0;
        $strUnidadMed = $this->__oCotizacion->__arrCotizacionLinea[$i]->strUnidadMedida;
        $fltPrecio    = round($this->__oCotizacion->__arrCotizacionLinea[$i]->fltPrecio , 2);
        $fltImporte   = round($this->__oCotizacion->__arrCotizacionLinea[$i]->fltImporte, 2);
        
        $oProducto = new Producto($this->__oCotizacion->__arrCotizacionLinea[$i]->intIdProducto);
        
        $this->PonerTexto( 12, 104 + ($i * 4),  10, 4, $intCantidad , "R");
        $this->PonerTexto( 22, 104 + ($i * 4), 115, 4, $oProducto->strCodigo . " " . $oProducto->strNombre); // 
        $this->PonerTexto(137, 104 + ($i * 4),  20, 4, $strUnidadMed, "R");
        $this->PonerTexto(157, 104 + ($i * 4),  20, 4, Variables::FormatoCurrency($fltPrecio ), "R");
        $this->PonerTexto(177, 104 + ($i * 4),  20, 4, Variables::FormatoCurrency($fltImporte), "R");
        
        $fltTotalRef += $fltImporte;
      }
    }
    
    $this->PonerTexto(177, 100 + (($strGTotalLineasCot + 2) * 4), 20, 4, Variables::FormatoCurrency($fltTotalRef       ), "R");
    $this->PonerTexto(177, 100 + (($strGTotalLineasCot + 3) * 4), 20, 4, Variables::FormatoCurrency($fltTotalRef * 0.16), "R");
    $this->PonerTexto(177, 100 + (($strGTotalLineasCot + 4) * 4), 20, 4, Variables::FormatoCurrency($fltTotalRef * 1.16), "R", 10, "B");
    
    $this->PonerTexto( 52, 100 + (($strGTotalLineasCot + 6) * 4), 145, 4, $this->__oCotizacion->strGarantia       , "L", 6, "");
    $this->PonerTexto( 52, 100 + (($strGTotalLineasCot + 7) * 4), 145, 4, $this->__oCotizacion->strTiempoEntrega  , "L", 6, "");
    $this->PonerTexto( 52, 100 + (($strGTotalLineasCot + 8) * 4), 145, 4, $this->__oCotizacion->strCondicionesPago, "L", 6, "");
  }
  
  function CreateNewPage() {
    global $strGPath;
    
    // Aqui se pone la estructura en blanco
    
    $this->oTCPDF->setPrintHeader(false);
    $this->oTCPDF->setPrintFooter(false);
    
    $this->oTCPDF->AddPage();
    
    // Logo
    $this->oTCPDF->Image("$strGPath/images/logo_small.png", 10, 8.5, 30, '');
    
    // Imagen Montacargas
    $this->oTCPDF->Image("$strGPath/images/monta.jpg", 170, 8.5, 30, '');
    
    $this->oTCPDF->SetTextColor($this->__intColorTextosEsta);
    
    // Presentar el encabezado
    $this->PonerTexto( 45, 8.5, 120, 6, "MONTACARGAS M & H S.A. DE C.V."                                           , "C", 18, "B");
    $this->PonerTexto( 45, 16, 120, 4, "VENTA, RENTA, SERVICIO, REPARACIÓN Y MANTENIMIENTO DE PATINES HIDRAHULICOS", "C",  7, "" );
    $this->PonerTexto( 45, 20, 120, 4, "MONTACARGAS, BATERÍAS, CARGADORES Y REFACCIONES EN GENERAL"                , "C",  7, "" );
    $this->PonerTexto( 45, 26, 120, 4, "www.maquinariaehidrahulicos.com / www.montacargasmyh.com"                  , "C", 10, "B");
    
    // Planta
    $this->PonerTexto( 10, 34, 45, 4, "PLANTA"                     , "C", 10, "B");
    $this->PonerTexto( 10, 39, 45, 3, "FANNY SCHILLER #97"         , "C",  7, "" );
    $this->PonerTexto( 10, 42, 45, 3, "COL. LA FORESTAL"           , "C",  7, "" );
    $this->PonerTexto( 10, 45, 45, 3, "G.A.M., 07140, MÉXICO, D.F.", "C",  7, "" );
    
    // TELS DF
    $this->PonerTexto( 55, 34, 45, 4, "TELS. 5606-1344", "C", 10, "B");
    $this->PonerTexto( 55, 39, 45, 4, "2227-0019"      , "C", 10, "B");
    $this->PonerTexto( 55, 44, 45, 4, "5306-1443"      , "C", 10, "B");
    
    // Sucursal DF
    $this->PonerTexto(100, 34, 45, 4, "Sucursal D.F."                    , "C", 10, "B");
    $this->PonerTexto( 99, 39, 48, 3, "AV. MIGUEL LERDO DE TEJADA LT. 19", "C", 7, "" );
    $this->PonerTexto(100, 42, 45, 3, "COL. EL TEPETATAL"                , "C", 7, "" );
    $this->PonerTexto(100, 45, 45, 3, "G.A.M., 07130, MÉXICO, D.F."      , "C", 7, "" );
    
    // TELS QUERETARO
    $this->PonerTexto(145, 34, 45, 4, "Sucursal Querétaro:", "C", 10, "B");
    $this->PonerTexto(145, 39, 45, 4, "01(442)-291-2218"   , "C", 10, "B");
    $this->PonerTexto(145, 44, 45, 4, "01(442)-291-2090"   , "C", 10, "B");
    
    // Mostrar la caja que contendrá toda la info
  }
  
  function DoRender() {
    $this->CreateNewPage          ();
    $this->CrearInteriorPagina    ();
    $this->CrearLabelsInterior    ();
    $this->ColocarInfoOrdenTrabajo();
  }
  
  function Guardar($strNombreArchivo = "", $strTipoGuardado = "I") {
    global $strGPath;
    global $strGUploads;
    $strRandName = "cotizacion_" . sprintf("%08d", $this->__oCotizacion->intIdCotizacion) . ".pdf";
    $strPathRel = "$strGUploads/ordenes/$strRandName";
    @unlink("$strGPath/$strPathRel");
    parent::Guardar("$strGPath/$strPathRel", "F");
    return $strPathRel;
  }
}

class Cotizacion extends ObjetoBase {
  var $intIdCotizacion   ;
  var $intIdCliente      ;
  var $intIdInventario   ;
  var $intIdOrdenTrabajo ;
  var $intIdEstatus      ;
  var $strUrlPDF         ;
  var $dteFecha          ;
  var $strContacto       ;
  var $strCorreo         ;
  var $strTelefono       ;
  var $strManoObra       ;
  var $strVigencia       ;
  var $strGarantia       ;
  var $strTiempoEntrega  ;
  var $strCondicionesPago;
  
  /**
   * @var Cliente
   */
  var $__oCliente      ;
  /**
   * @var Inventario
   */
  var $__oInventario   ;
  /**
   * @var CotizacionLinea
   */
  var $__arrCotizacionLinea;
  
  function Cotizacion($intIdCotizacion = 0) {
    $arrMapaDatos = Array();
    $arrMapaDatos['id_cotizacion'   ] = Array('NombreVariable' => 'intIdCotizacion'   , 'TipoVariable' => 'I');
    $arrMapaDatos['id_cliente'      ] = Array('NombreVariable' => 'intIdCliente'      , 'TipoVariable' => 'N');
    $arrMapaDatos['id_inventario'   ] = Array('NombreVariable' => 'intIdInventario'   , 'TipoVariable' => 'N');
    $arrMapaDatos['id_orden_trabajo'] = Array('NombreVariable' => 'intIdOrdenTrabajo' , 'TipoVariable' => 'N');
    $arrMapaDatos['id_estatus'      ] = Array('NombreVariable' => 'intIdEstatus'      , 'TipoVariable' => 'N');
    $arrMapaDatos['url_pdf'         ] = Array('NombreVariable' => 'strUrlPDF'         , 'TipoVariable' => 'S');
    $arrMapaDatos['fecha'           ] = Array('NombreVariable' => 'dteFecha'          , 'TipoVariable' => 'D');
    $arrMapaDatos['contacto'        ] = Array('NombreVariable' => 'strContacto'       , 'TipoVariable' => 'S');
    $arrMapaDatos['correo'          ] = Array('NombreVariable' => 'strCorreo'         , 'TipoVariable' => 'S');
    $arrMapaDatos['telefono'        ] = Array('NombreVariable' => 'strTelefono'       , 'TipoVariable' => 'S');
    $arrMapaDatos['mano_obra'       ] = Array('NombreVariable' => 'strManoObra'       , 'TipoVariable' => 'S');
    $arrMapaDatos['vigencia'        ] = Array('NombreVariable' => 'strVigencia'       , 'TipoVariable' => 'S');
    $arrMapaDatos['garantia'        ] = Array('NombreVariable' => 'strGarantia'       , 'TipoVariable' => 'S');
    $arrMapaDatos['tiempo_entrega'  ] = Array('NombreVariable' => 'strTiempoEntrega'  , 'TipoVariable' => 'S');
    $arrMapaDatos['condiciones_pago'] = Array('NombreVariable' => 'strCondicionesPago', 'TipoVariable' => 'S');
    
    $this->__ArmarDatosPrivados('cotizacion', $arrMapaDatos, 'id_cotizacion');
    $this->SeleccionarPorIndice($intIdCotizacion);
  }
  
  function ObtenerObjetos() {
    global $strGTotalLineasCot;
    $intTotalLineas = $strGTotalLineasCot;
    $this->__oCliente    = new Cliente   ($this->intIdCliente   );
    $this->__oInventario = new Inventario($this->intIdInventario);
    
    $oConecta = new Conecta();
    $strConsulta = "SELECT id_cotizacion_linea FROM cotizacion_linea WHERE id_cotizacion = {$this->intIdCotizacion} ORDER BY id_cotizacion_linea ASC LIMIT $intTotalLineas";
    $oConecta->Consulta($strConsulta);
    
    $intLineaAct = 0;
    $arrLineas = array();
    while(!$oConecta->EOF) {
      $arrLineas[$intLineaAct] = $oConecta->Field('id_cotizacion_linea');
      $oConecta->MoveNext();
      $intLineaAct++;
    }
    
    for($i = $intLineaAct; $i < $intTotalLineas; $i++) {
      $arrLineas[$i] = 0;
    }
    
    foreach($arrLineas as $i => $intId) {
      eval('$this->__arrCotizacionLinea[$i] = new CotizacionLinea($intId);');
    }
  }
  
  function MostrarListaRapida() {
    $oTemplate      = new Template();
    $oConecta       = new Conecta();
    
    if(Variables::GetOption('paso') == '2') {
      foreach(Variables::GetOption('cerrar') as $intIdCotiza) {
        $strConsulta = "UPDATE cotizacion SET id_estatus = 1 WHERE id_cotizacion = $intIdCotiza";
        $oConecta->Consulta($strConsulta);
      }
      header("Location: index.php?option=cotizacion_lista");
      die;
    }
    
    $intPagina      = Variables::GetOption('pagina' ) - 0;
    $intSoloEstatus = Variables::GetOption('estatus') - 0;
    
    // Ver cuantos elementos existen
    $strConsulta = "SELECT COUNT(*) AS cuantos FROM cotizacion ";
    if($intSoloEstatus) {
      $strConsulta .= "WHERE id_estatus = " . ($intSoloEstatus - 1) . " ";
    }
    $oConecta->Consulta($strConsulta);
    $intContador = $oConecta->Field('cuantos');
    
    // Obtener los elementos de esta página
    $strConsulta  = "SELECT * ";
    $strConsulta .= "FROM cotizacion ";
    if($intSoloEstatus) {
      $strConsulta .= "WHERE id_estatus = " . ($intSoloEstatus - 1) . " ";
    }
    $strConsulta .= "ORDER BY id_cotizacion DESC ";
    $strConsulta .= "LIMIT " . ($intPagina * 20) . ", 20";
    
    $oConecta->Consulta($strConsulta);
    $strTablaDatos  = "";
    while(!$oConecta->EOF) {
      $strTablaDatos .= "<tr " . Variables::AlternarConClase() . ">";
      $strTablaDatos .= "<td>" . $oConecta->Field('id_cotizacion') . "</td>";
      $strTablaDatos .= "<td>" . Variables::GetValueByTable("cat_clientes", "id_cliente", "razon_social", $oConecta->Field('id_cliente')) . "</td>";
      $strTablaDatos .= "<td>" . Variables::GetValueByTable("inventario", "id_inventario", "CONCAT(tipo_monta, ' ', marca, ' ', modelo, ' ', serie, ' ', tipo, ' ', columna1)", $oConecta->Field('id_inventario')) . "</td>";
      $strTablaDatos .= "<td><a href='" . $oConecta->Field('url_pdf') . "'>Ver PDF</a></td>";
      if($oConecta->Field('id_estatus') == "0") {
        $strTablaDatos .= "<td>";
        $strTablaDatos .= "<input type='checkbox' name='cerrar[]' value='" . $oConecta->Field('id_cotizacion') . "' />";
        $strTablaDatos .= "</td>";
        $strTablaDatos .= "<td>Sin Facturar</td>";
      } else {
        $strTablaDatos .= "<td>&nbsp;</td>";
        $strTablaDatos .= "<td>Facturada</td>";
      }
      $strTablaDatos .= "<td><a href='index.php?option=abc_cotizacion&editar=1&id=" . $oConecta->Field('id_cotizacion') . "'>Editar</a></td>";
      
      if($oConecta->Field('id_orden_trabajo')) {
        $strTablaDatos .= "<td><a href='index.php?option=orden_trabajo&id=" . $oConecta->Field('id_orden_trabajo') . "'>Editar</a></td>";
      } else {
        $strTablaDatos .= "<td><a href='index.php?option=mandar_orden_trabajo&id=" . $oConecta->Field('id_cotizacion') . "'>Crear</a></td>";
      }
      
      $strTablaDatos .= "</tr>";
      $oConecta->MoveNext();
    }
    
    eval('$strRes = "' . $oTemplate->Get('lista_cotizaciones_small.tpl.php') . '";');
    return $strRes;
  }
  
  /**
   * Si ya tiene una orden de trabajo, regresa ese ID, de lo contrario, la crea y
   * regresa dicho ID
   */
  function CrearComoOrdenTrabajo() {
    if($this->intIdOrdenTrabajo) {
      return $this->intIdOrdenTrabajo;
    }
    
    $this->ObtenerObjetos();
    
    $oOrdenTrabajo = new OrdenTrabajo();
    $oOrdenTrabajo->intIdCliente     = $this->intIdCliente;
    $oOrdenTrabajo->intIdEquipo      = $this->intIdInventario;
//    $oOrdenTrabajo->intIdTrabajador  ;
//    $oOrdenTrabajo->intIdSucursal    ;
    $oOrdenTrabajo->intIdEstatus     = 1;
//    $oOrdenTrabajo->strInformando    ;
    $oOrdenTrabajo->strFecha         = date("Y-m-d H:i:s");
//    $oOrdenTrabajo->strHoras         ;
//    $oOrdenTrabajo->strFechaPS       ;
//    $oOrdenTrabajo->strHEntrada      ;
//    $oOrdenTrabajo->strHSalida       ;
//    $oOrdenTrabajo->strFallasDet     ;
    $oOrdenTrabajo->strTrabajosEfec  = $this->strManoObra;
//    $oOrdenTrabajo->strRecomendacion ;
    
    $arrD = unserialize($this->strManoObra);
    $oOrdenTrabajo->fltManoObra = 0;
    for($i = 0; $i < 10; $i++) {
      $oOrdenTrabajo->fltManoObra += ($arrD["cant"][$i] * $arrD["prec"][$i]);
    }

    for($i = 1; $i < 12; $i++) {
      $oProd = new Producto($this->__arrCotizacionLinea[$i - 1]->intIdProducto);
      eval('$oOrdenTrabajo->intIdIdRef' . $i . ' = ' . $this->__arrCotizacionLinea[$i - 1]->intIdProducto . ';');
      eval('$oOrdenTrabajo->intCantRef' . $i . ' = ' . $this->__arrCotizacionLinea[$i - 1]->fltCantidad   . ';');
      eval('$oOrdenTrabajo->fltPrecRef' . $i . ' = ' . $this->__arrCotizacionLinea[$i - 1]->fltPrecio     . ';');
      eval('$oOrdenTrabajo->fltIVARef'  . $i . ' = ' . $oProd->fltImpuesto . ';');
    }

    $oOrdenTrabajo->fltVarios   = 0;
    $oOrdenTrabajo->fltForaneos = 0;
    
    $oOrdenTrabajo->GuardarObjeto(true, true);
    $this->intIdOrdenTrabajo = $oOrdenTrabajo->intIdOrdenTrabajo;
    $this->GuardarObjeto();
//    $oOrdenTrabajo->strUrlPdf; // Se guarda en la siguiente llamada
    
    $oOrdenTrabajo->ObtenerPDF($oOrdenTrabajo->intIdOrdenTrabajo, false);
    
    return $oOrdenTrabajo->intIdOrdenTrabajo;
  }
}

class FiltroCotizacion extends Filtro {
  function FiltroCotizacion() {
    $arrNombresColumnas['id_cotizacion'   ] = "Cotizacion"      ;
    $arrNombresColumnas['id_cliente'      ] = "Cliente"         ;
    $arrNombresColumnas['id_inventario'   ] = "Equipo"          ;
    $arrNombresColumnas['id_orden_trabajo'] = "Orden de Trabajo";
    $arrNombresColumnas['id_estatus'      ] = "Estatus"         ;
    $arrNombresColumnas['fecha'           ] = "Fecha"           ;
    $arrNombresColumnas['contacto'        ] = "Contacto"        ;
    $arrNombresColumnas['correo'          ] = "Correo"          ;
    $arrNombresColumnas['telefono'        ] = "Telefono"        ;
    $arrNombresColumnas['vigencia'        ] = "Vigencia"        ;
    $arrNombresColumnas['garantia'        ] = "Garantia"        ;
    $arrNombresColumnas['tiempo_entrega'  ] = "Tiempo Entrega"  ;
    $arrNombresColumnas['condiciones_pago'] = "Condiciones Pago";
    
    /*
    $arrReferencias['id_sucursal'  ]["tabla"]["nombre"] = "cat_sucursales";
    $arrReferencias['id_sucursal'  ]["tabla"]["indice"] = "id_sucursal"   ;
    $arrReferencias['id_sucursal'  ]["tabla"]["desc"  ] = "nombre"        ;
    */
    
    $arrReferencias['id_estatus'   ]["tabla"]["nombre"] = "cat_estatus";
    $arrReferencias['id_estatus'   ]["tabla"]["indice"] = "id_estatus" ;
    $arrReferencias['id_estatus'   ]["tabla"]["desc"  ] = "nombre"     ;
    $arrReferencias['id_cliente'   ]["tabla"]["nombre"] = "cat_clientes";
    $arrReferencias['id_cliente'   ]["tabla"]["indice"] = "id_cliente"  ;
    $arrReferencias['id_cliente'   ]["tabla"]["desc"  ] = "razon_social";
    $arrReferencias['id_inventario']["tabla"]["nombre"] = "inventario";
    $arrReferencias['id_inventario']["tabla"]["indice"] = "id_inventario"  ;
    $arrReferencias['id_inventario']["tabla"]["desc"  ] = "CONCAT(no_eco, ' ', marca, ' ', modelo, ' ', serie, ' ', tipo)";
    
    parent::CrearFiltro("cotizacion", "id_cotizacion", $arrNombresColumnas, "Busqueda", "", "", "Cotizacion", $arrReferencias);
  }
}

class ABC_Cotizacion extends ABC_Base {
  function ABC_Cotizacion() {
    $strClaseBase     = "Cotizacion"         ;
    $strClaseFiltro   = "FiltroCotizacion"   ;
    $strClaseCarga    = ""                   ;
    $strCampoMostrar  = "fecha,id_cotizacion";
    $strOpcionListado = "abc_cotizacion"     ;
    $strOpcionGuardar = "abc_cotizacion"     ;

    $arrNombresColumnas = array();
    $arrNombresColumnas['id_cliente'      ] = "Cliente"         ;
    $arrNombresColumnas['id_inventario'   ] = "Equipo"          ;
    $arrNombresColumnas['id_orden_trabajo'] = "Orden de Trabajo";
    $arrNombresColumnas['fecha'           ] = "Fecha"           ;
    $arrNombresColumnas['contacto'        ] = "Contacto"        ;
    $arrNombresColumnas['correo'          ] = "Correo"          ;
    $arrNombresColumnas['telefono'        ] = "Telefono"        ;
    $arrNombresColumnas['vigencia'        ] = "Vigencia"        ;
    $arrNombresColumnas['garantia'        ] = "Garantia"        ;
    $arrNombresColumnas['tiempo_entrega'  ] = "Tiempo Entrega"  ;
    $arrNombresColumnas['condiciones_pago'] = "Condiciones Pago";
    $arrNombresColumnas['id_estatus'      ] = "Estatus"         ;
    $arrNombresColumnas['url_pdf'         ] = "PDF"             ;
    
    $arrReferencias = array();
    $arrReferencias['id_estatus'   ]["tabla"]["nombre"] = "cat_estatus";
    $arrReferencias['id_estatus'   ]["tabla"]["indice"] = "id_estatus" ;
    $arrReferencias['id_estatus'   ]["tabla"]["desc"  ] = "nombre"     ;
    
    $arrReferencias['id_cliente'   ]["tabla"]["nombre"] = "cat_clientes";
    $arrReferencias['id_cliente'   ]["tabla"]["indice"] = "id_cliente"  ;
    $arrReferencias['id_cliente'   ]["tabla"]["desc"  ] = "razon_social";
    $arrReferencias['id_inventario']["tabla"]["nombre"] = "inventario";
    $arrReferencias['id_inventario']["tabla"]["indice"] = "id_inventario"  ;
    $arrReferencias['id_inventario']["tabla"]["desc"  ] = "CONCAT(no_eco, ' ', marca, ' ', modelo, ' ', serie, ' ', tipo)";
    
    $this->Inicializar($strClaseBase, $arrNombresColumnas, $strOpcionListado, $strOpcionGuardar, $strCampoMostrar, $strClaseFiltro, $arrReferencias, "", $strClaseCarga);
    
    $this->bolABCLista                = false;
    $this->intEdicionPaginaNueva      = 1;
    $this->strUseTemplate             = "cotizacion.tpl.php";
//    $this->strUseTemplate             = "1";
    $this->bolABCListaOcultarTD       = false;
    $this->bolPosibleNuevoElemento    = true;
    $this->intTipoGuardado            = 0;
    $this->intNumeroRes               = 20;
    $this->bolSoloLectura             = false;
//    $this->bolPosibleExportarExcel    = true;
//    $this->bolPluginsLocalesIzquierda = true;
  }
  
  /**
   * 
   * @param Cotizacion $oObjeto       Objeto al cual se le está generando el input
   * @param string $strNombreTemplate Nombre del template que se colocará
   * @param array  $arrInfoInputs     Arregflo con la informacion de los inputs.
   * @param string $__strFormBefore   Cadena que contiene el FORM de antes (Puede venir vacio, lo que indica que no se encierran los datos en una forma)
   * @param string $__strFormAfter    Cadena que contiele el FORM de despues 
   */
  function UsoTemplateAlterno($oObjeto, $strNombreTemplate, $arrInfoInputs, $__strFormBefore, $__strFormAfter) {
    $oObjeto->ObtenerObjetos();
    
    // Obtener los inputs
    
    $strInputLinea = "";
    $fltImporteTot = 0;
    
    $strJSArrPrecios = Variables::GetJSArrayByTable("cat_productos", "id_producto", "precio", "arrPrecios");
    
    $intTotalLineas = 0;
    foreach($oObjeto->__arrCotizacionLinea as $intIdCotLin => $oCotizacionLinea) {
      $strInputLinea .= "<tr " . Variables::AlternarConClase() . ">";
      
      $strInputLinea .= "<td>";
      $strInputLinea .= "<input type='hidden' name='productos[$intIdCotLin][id]' value='{$oCotizacionLinea->intIdCotizacionLinea}' />";
      $strInputLinea .= "<input type='text' size='5' name='productos[$intIdCotLin][cantidad]' value='{$oCotizacionLinea->fltCantidad}' id='cant_{$intIdCotLin}' onblur='CambioTotal();' />";
      $strInputLinea .= "</td>";
      
      $strInputLinea .= "<td>";
      $strInputLinea .= Variables::GetSelectByTable("cat_productos", "id_producto", "CONCAT(codigo, ' - ', nombre)", $oCotizacionLinea->intIdProducto, "productos[$intIdCotLin][id_producto]", "id='prod_{$intIdCotLin}' onchange='CambioTotal();'", "ORDER BY codigo ASC", array(":: SELECCIONE ::"));
      $strInputLinea .= "</td>";
      
      $strInputLinea .= "<td>";
      $strInputLinea .= "<input type='text' size='10' name='productos[$intIdCotLin][unidad_medida]' value='{$oCotizacionLinea->strUnidadMedida}' />";
      $strInputLinea .= "</td>";
      
      $strInputLinea .= "<td class='ClaseCurrency' id='prec_{$intIdCotLin}'>{$oCotizacionLinea->fltPrecio}</td>";
      $strInputLinea .= "<td class='ClaseCurrency' id='impo_{$intIdCotLin}'>{$oCotizacionLinea->fltImporte}</td>";
      
      $fltImporteTot += $oCotizacionLinea->fltImporte;
      
      $strInputLinea .= "</tr>";
      
      $intTotalLineas++;
    }
    
    $arrManoObra = unserialize($oObjeto->strManoObra);
    $strRowsManoObra = "";
    Variables::AlternarConClase();
    for($i = 0; $i < 10; $i++) {
      $strRowsManoObra .= "<tr " . Variables::AlternarConClase() . ">";
      $strRowsManoObra .= "<td><input type='text' name='datos_trab[cant][]' size='5'  value='{$arrManoObra["cant"][$i]}' id='trab_ef_cant_{$i}' onblur='CambioTotal()' /></td>";
      $strRowsManoObra .= "<td><input type='text' name='datos_trab[desc][]' size='50' value='{$arrManoObra["desc"][$i]}' /></td>";
      $strRowsManoObra .= "<td>&nbsp;</td>";
      $strRowsManoObra .= "<td><input type='text' name='datos_trab[prec][]' size='8'  value='{$arrManoObra["prec"][$i]}' id='trab_ef_prec_{$i}' onblur='CambioTotal()' /></td>";
      $strRowsManoObra .= "<td class='ClaseCurrency' id='trab_ef_total_{$i}'>";
      $strRowsManoObra .= ($arrManoObra["cant"][$i] * $arrManoObra["prec"][$i]);
      $strRowsManoObra .= "</td>";
      $strRowsManoObra .= "</tr>";
      
      $fltImporteTot   += ($arrManoObra["cant"][$i] * $arrManoObra["prec"][$i]);
    }
    
    $strDireccion  = $oObjeto->__oCliente->strDireccion;
    $strAtencionA  = $oObjeto->__oCliente->strAtencionA;
    $strCorreoE    = $oObjeto->__oCliente->strCorreo;
    $strTelefono   = $oObjeto->__oCliente->strTelefono;
    $intCotizacion = $oObjeto->intIdCotizacion;
    
    $arrInfoInputs["__general"]["strUrlPDF"      ] = $oObjeto->strUrlPDF;
    
    $arrInfoInputs["__general"]["strDireccion"   ] = $strDireccion ;
    $arrInfoInputs["__general"]["strAtencionA"   ] = $strAtencionA ;
    $arrInfoInputs["__general"]["strCorreoE"     ] = $strCorreoE   ;
    $arrInfoInputs["__general"]["strTelefono"    ] = $strTelefono  ;
    $arrInfoInputs["__general"]["intCotizacion"  ] = $intCotizacion;
    
    $arrInfoInputs["__general"]["strInputLinea"  ] = $strInputLinea;
    $arrInfoInputs["__general"]["fltImporteTot"  ] = $fltImporteTot;
    $arrInfoInputs["__general"]["fltImporteIVA"  ] = $fltImporteTot * 0.16;
    $arrInfoInputs["__general"]["fltImporteTotA" ] = $fltImporteTot * 1.16;
    
    $arrInfoInputs["__general"]["strJSArrPrecios"] = $strJSArrPrecios;
    $arrInfoInputs["__general"]["intTotalLineas" ] = $intTotalLineas ;
    $arrInfoInputs["__general"]["strRowsManoObra"] = $strRowsManoObra;
    
    return parent::UsoTemplateAlterno($oObjeto, $strNombreTemplate, $arrInfoInputs, $__strFormBefore, $__strFormAfter);
  }
  
  function __GuardarElemento() {
//    prent_r($_POST);
    $oCotizacion = new Cotizacion();
    $oCotizacion->LlenarObjeto($_POST["datos"]);
    $oCotizacion->strManoObra = serialize($_POST["datos_trab"]);
    
    $oCotizacion->GuardarObjeto(true, true);
    
    $oCotizaLin = new CotizacionLinea();
    $oProducto = new Producto();
    foreach($_POST["productos"] as $arrInfoProducto) {
      if($arrInfoProducto["id_producto"] != 0) {
        $oProducto ->LimpiarObjeto();
        $oCotizaLin->LimpiarObjeto();
        
        $oProducto->SeleccionarPorIndice($arrInfoProducto["id_producto"]);
        
        $oCotizaLin->intIdCotizacionLinea = $arrInfoProducto["id"           ];
        $oCotizaLin->intIdCotizacion      = $oCotizacion->intIdCotizacion;
        $oCotizaLin->fltCantidad          = $arrInfoProducto["cantidad"     ];
        $oCotizaLin->intIdProducto        = $arrInfoProducto["id_producto"  ];
        $oCotizaLin->strUnidadMedida      = $arrInfoProducto["unidad_medida"];
        $oCotizaLin->fltPrecio            = $oProducto->fltPrecio;
        $oCotizaLin->fltImporte           = $oCotizaLin->fltPrecio * $oCotizaLin->fltCantidad;
        
//        die($oCotizaLin->GuardarObjeto(false));
        $oCotizaLin->GuardarObjeto();
      } else {
        // Checar si se necesita borrar el producto
        if($arrInfoProducto["id"]) {
          $oCotizaLin->SeleccionarPorIndice($arrInfoProducto["id"]);
//          die($oCotizaLin->BorrarObjeto());
          $oCotizaLin->BorrarObjeto(true);
        }
      }
    }
    
    // Generar el pdf y guardarlo
    $oPDFCot = new PDF_Cotizacion($oCotizacion);
    $oPDFCot->DoRender();
    $oCotizacion->strUrlPDF = $oPDFCot->Guardar();
    $oCotizacion->GuardarObjeto();
    
    header("Location: index.php?option=abc_cotizacion&editar=1&id={$oCotizacion->intIdCotizacion}");
  }
}

?>
